方法(Method)
定義方法
在 Ruby 定義方法,使用的是 def 這個關鍵字:
def say
puts "Hello, Ruby"
end
建立帶有參數的方法
def add(a, b)
puts a + b
end
建立帶有參數預設值的方法
方法內可以定義參數預設值,預設值不一定要放在最前面或最後面,但是必須是組在一起的:
def add_values(a = 2, b)
a + b
end
p add_values(4) # 6
def add_values(a, b = 4)
a + b
end
p add_values(1) # 5
為物件直接新增方法
greeting = "Hello "
def greeting.sayhi(name)
puts self + name
end
greeting.sayhi("Ruby") # Hello Ruby
在 Ruby 中函式(function)就是方法(method),命名的開頭一般是小寫(也可以是 _ 或數字);結尾可以是?(問號,question)或!(驚嘆號,bang,exclamation)或=(等號,equal)。
一般來說(慣例):
結尾如果是!,執行方式和一般方法沒有差別,但通常用!結尾,這個方法會改變原本的變數值,同時也表示它會有一個相對應不會改變原本變數值的方法。
list = [1, 2, 3, 4, 5]
reversed_list = original_list.reverse
p reversed_list # => [5, 4, 3, 2, 1]
p list # => [1, 2, 3, 4, 5]
#加入驚嘆號的方法
list = [1, 2, 3, 4, 5]
reversed_list = original_list.reverse!
p reversed_list # => [5, 4, 3, 2, 1]
p list # => [5, 4, 3, 2, 1]
結尾如果是?,這個方法經常會回傳表示 true 或 false 的物件。
puts "".empty? # => true
puts [1, 2, 3, 4, 5].include?(10) # => false
puts "Ruby".start_with?("Ru") # => true
結尾如果是=,表示這個方法是指派方法(assignment method),在 assignment method 中,函式中的回傳值會被忽略,而是自動回傳參數的值。
依照上面的講解 自己做做看 測量BMI的方法
# BMI值計算公式: BMI = 體重(單位:公斤)/ 身高平方(單位:公尺)
def bmi_calculator(height, weight)
return (weight / height ** 2).ceil(2) #ceil(2)的意思是取到小數點第二位
end
puts bmi_calculator(1.85, 70) # => 20.45